package com.vicene.gmail.product;

import org.mybatis.spring.annotation.MapperScan;
import org.redisson.spring.session.config.EnableRedissonHttpSession;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;


/**
 * 1:整合mybatis-plus
 *  1）：导入依赖
 *      <dependency>
 *             <groupId>com.baomidou</groupId>
 *             <artifactId>mybatis-plus</artifactId>
 *             <version>3.2.0</version>
 *         </dependency>
 *  2）：配置
 *      1：数据源
 *          1：驱动
 *          2：application.yml配置数据源
 *      2：配置mybatis-plus
 *          1：用@MapperScan
 *          2：告诉mybatis-plus sql映射配置
 *  3)：逻辑删除
 *      1：配置逻辑删除规则
 *       logic-delete-value: 1
 *       logic-not-delete-value: 0
 *      2：配置逻辑删除的组件bean
 *      3：给bean加上逻辑删除注解	@TableLogic
 *  4)：JSR303
 *      1：bean添加校验注解，javax.validation.constraints
 *      2：开启校验功能 @Valid
 *      3：验证对象后紧跟BindingResult @Valid @RequestBody BrandEntity brand , BindingResult result
 *      4：分组校验
 *          1：对参数对象增加@Validated(AddGroup.class)注解
 *          2：	字段上添加什么情况需要什么注解校验
 *              @NotNull(message = "修改必须指定品牌id" , groups = {EditGroup.class})
 *              @Null(message = "新增不能指定品牌id" , groups = {AddGroup.class})
 *              @TableId
 *              private Long brandId;
 *          3：默认没指定分组的校验注解@NotNull，在分组校验情况下@Validated(AddGroup.class)不生效，只会在@Validated生效
 *      5：自定义校验
 *          1：编写一个自定义校验注解
 *          2：编写自定义校验器
 *          3：关联自定义校验器和自定义校验注解
 *  5)：统一异常处理@ControllerAdvice
 *      1：编写异常处理类，使用@ControllerAdvice
 *      2：使用@ExceptionHandler处理异常
 *
 */
@EnableRedisHttpSession
@EnableCaching
@EnableFeignClients(basePackages = "com.vicene.gmail.product.feign")
@EnableDiscoveryClient
@MapperScan("com.vicene.gmail.product.dao")
@SpringBootApplication
public class GmailProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GmailProductApplication.class, args);
    }

}
